package socket;

import java.io.IOException;
import java.io.OutputStream;
import java.net.Socket;
import java.net.UnknownHostException;

public class SimpleClient {

    public static void main(String[] args) throws UnknownHostException, IOException {
        Socket socket = new Socket("192.168.31.79", 8000);
//        socket.setSoLinger(true, 0);            //Socket关闭后，底层Socket立即关闭
//        socket.setSoLinger(true, 3600);         //Socket关闭后，底层Socket延迟3600秒再关闭
        OutputStream os = socket.getOutputStream();
        StringBuffer sb = new StringBuffer();
        for (int i = 0; i < 10000; i++) {
            sb.append(i);
        }
        os.write(sb.toString().getBytes());         //发送一万个字符
        System.out.println("开始关闭Socket");
        long begin = System.currentTimeMillis();
        socket.close();
        long end = System.currentTimeMillis();
        System.out.println("关闭socket所使用的时间为：" + (end - begin) + "ms");
    }
}

/**
 *  （1）先启动SimpleServer进程，再启动SimpleClient进程
 *
 *    （2）把 //socket.setSoLinger(true, 0);            //Socket关闭后，底层Socket立即关闭
 *            的注释去掉，再次先后启动SimpleServer和SimpleClient 进程，这样当Socket关闭时，会强行关闭底层的Socket,
 *
 *            所有未发送完的数据丢失
 *
 *    （3）把//socket.setSoLinger(true, 3600);         //Socket关闭后，底层Socket延迟3600秒再关闭
 *            的注释去掉，再次先后启动SimpleServer和SimpleClient进程，这样当SimpleClient执行Socket的close方法时，
 *
 *            会进入阻塞状态，直到等待了3600秒，或者底层Socket已经把所有未发送的剩余数据发送完毕，才会从close返回
 *
 *    （4）
 *
 * 文章知识
 * ————————————————
 * 版权声明：本文为CSDN博主「波哥的技术积累」的原创文章，遵循CC 4.0 BY-SA版权协议，转载请附上原文出处链接及本声明。
 * 原文链接：https://blog.csdn.net/woshisap/article/details/6576719
 */

/**
 * PS C:\Users\wngbm> NETSTAT.EXE -ano | findstr 8000
 * PS C:\Users\wngbm> NETSTAT.EXE -ano | findstr 8000
 *   TCP    0.0.0.0:8000           0.0.0.0:0              LISTENING       2976
 *   TCP    [::]:8000              [::]:0                 LISTENING       2976
 * PS C:\Users\wngbm> NETSTAT.EXE -ano | findstr 8000
 *   TCP    0.0.0.0:8000           0.0.0.0:0              LISTENING       2976
 *   TCP    127.0.0.1:8000         127.0.0.1:54500        CLOSE_WAIT      2976
 *   TCP    127.0.0.1:54500        127.0.0.1:8000         FIN_WAIT_2      16812
 *   TCP    [::]:8000              [::]:0                 LISTENING       2976
 * PS C:\Users\wngbm> NETSTAT.EXE -ano | findstr 8000
 *   TCP    0.0.0.0:8000           0.0.0.0:0              LISTENING       2976
 *   TCP    127.0.0.1:8000         127.0.0.1:54500        CLOSE_WAIT      2976
 *   TCP    127.0.0.1:54500        127.0.0.1:8000         FIN_WAIT_2      16812
 *   TCP    [::]:8000              [::]:0                 LISTENING       2976
 * PS C:\Users\wngbm> NETSTAT.EXE -ano | findstr 8000
 *   TCP    0.0.0.0:8000           0.0.0.0:0              LISTENING       2976
 *   TCP    127.0.0.1:8000         127.0.0.1:54500        CLOSE_WAIT      2976
 *   TCP    127.0.0.1:54500        127.0.0.1:8000         FIN_WAIT_2      16812
 *   TCP    [::]:8000              [::]:0                 LISTENING       2976
 * PS C:\Users\wngbm> NETSTAT.EXE -ano | findstr 8000
 * PS C:\Users\wngbm>
 */

